package eu.floranet.arquivo.model.permissions;

import java.util.List;

import javax.persistence.Query;

import eu.floranet.arquivo.temp.EclipseLink;
import eu.floranet.arquivo.temp.EclipseLinkException;
import eu.floranet.repositorio.sql.RelationObjectoPermissao;
import eu.floranet.repositorio.sql.RelationUserGrupo;
import eu.floranet.repositorio.sql.SysGrupos;
import eu.floranet.repositorio.sql.SysObjectos;
import eu.floranet.repositorio.sql.SysUsers;

public class ArquivoPermissions extends EclipseLink {

	private List<RelationUserGrupo> listaUserGrupo;
	
	public ArquivoPermissions(SysUsers sysUsers){
		try {
			setUserPermissions(sysUsers);
		} catch (EclipseLinkException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public ArquivoPermissions(SysUsers sysUsers, SysObjectos sysObjectos){
		
	}

	public ArquivoPermissions(SysGrupos sysGrupos){
		
	}
	
	public ArquivoPermissions(SysGrupos sysGrupos, SysObjectos sysObjectos){
		
	}
	
	@SuppressWarnings("unchecked")
	public void setUserPermissions(SysUsers sysUsers) throws EclipseLinkException{
		
		initEntityManager();
		em.getTransaction().begin();
			
		String sql = "SELECT DISTINCT rop FROM RelationObjectoPermissao rop " +
						"WHERE rop.opUser IN (:USER)";
			
		Query query = em.createQuery(sql).setParameter("USER", sysUsers.getIdusers());
			
		setListaUserGrupo(sysUsers.getListaUserGrupo());
		setGrupoPermissions(getSysGrupos());
			
		if(!query.getResultList().isEmpty()){
			List<RelationObjectoPermissao> lop = query.getResultList();
			
			
			
			for(RelationObjectoPermissao op : lop){
				
			}
		}
			
		cleanUpClosedEMF();
		
	}
	
	public void setGrupoPermissions(SysGrupos sysGrupos) throws EclipseLinkException{
		initEntityManager();
		em.getTransaction().begin();
		
		String sql = "SELECT DISTINCT rop FROM RelationObjectoPermissao rop " +
						"WHERE rop.opGrupo IN (:GRUPO)";
		
		Query query = em.createQuery(sql).setParameter("USER", sysGrupos.getIdgrupos());
		
		if(this.listaUserGrupo == null){
			setListaUserGrupo(sysGrupos.getListaUserGrupo());
		}
		
		if(!query.getResultList().isEmpty()){
			List<RelationObjectoPermissao> lop = query.getResultList();
			
		}
		
		cleanUpClosedEMF();
	}
	
	protected void setListaUserGrupo(List<RelationUserGrupo> Lrug){
		this.listaUserGrupo = Lrug;
	}
	
	private SysGrupos getSysGrupos(){
		SysGrupos sysGrupos = null;
		
		if(this.listaUserGrupo != null){
			for(RelationUserGrupo ug : this.listaUserGrupo ){
				sysGrupos = ug.getUgGrupo();
			}
		} 
		
		return sysGrupos;
	}
}
